home *** CD-ROM | disk | FTP | other *** search
/ Essentials of Interactive Physiology / Essentials of Interactive Physiology.iso / pc / files / evaluation / evaluation.dcr / 00003_questionParent.ls < prev    next >
Encoding:
Text File  |  2002-04-02  |  8.3 KB  |  234 lines

  1. property pkMaxDigits, poOwner, poAnswerBtns, poDotMan, piNumAnswers, psBaseMemberName, psButtonType, pzEvalType, piBaseOffset, piQuestionOffset, pliAnswerOffset, piFromChapterOffset, piFirstAnswerSprite, piQuestionSprite, piFromChapterSprite, piResponseSprites, piCorrectAnswer, plAnswerOrder
  2.  
  3. on new me, xoDotMan, xoOwner, xiNumAnswers, xsButtonType, xkMaxDigits
  4.   poDotMan = xoDotMan
  5.   poOwner = xoOwner
  6.   piNumAnswers = xiNumAnswers
  7.   pzEvalType = xsButtonType
  8.   case xsButtonType of
  9.     #quiz:
  10.       psButtonType = "Toggle"
  11.     #test:
  12.       psButtonType = "Radio"
  13.     otherwise:
  14.       psButtonType = xsButtonType
  15.   end case
  16.   piBaseOffset = 20
  17.   pkMaxDigits = xkMaxDigits
  18.   return me
  19. end
  20.  
  21. on mInitQuestionTemplate me, xsBaseMemberName
  22.   mInitLetters(me, xsBaseMemberName)
  23.   mInitTextFields(me)
  24. end
  25.  
  26. on mInitLetters me, xsBaseMemberName
  27.   vlbuttons = []
  28.   viSprite = mGiveDots(poDotMan, piNumAnswers)
  29.   psBaseMemberName = xsBaseMemberName
  30.   repeat with i = 1 to piNumAnswers
  31.     vsMemberName = xsBaseMemberName & IntegerToString(i, pkMaxDigits)
  32.     vlAbuttonInfo = [#sprite: viSprite + i - 1, #name: vsMemberName, #ID: i]
  33.     add(vlbuttons, vlAbuttonInfo)
  34.   end repeat
  35.   poAnswerBtns = new(script(psButtonType & "GroupParent"), vlbuttons, #none)
  36.   mSetOwner(poAnswerBtns, me)
  37.   mDisable(poAnswerBtns, 0)
  38.   mSetBtnSound(poAnswerBtns, "clickSnd")
  39.   piResponseSprites = mGiveDots(poDotMan, piNumAnswers)
  40.   vsMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
  41.   vpOffset = (point(member(vsMember).width, 0) / 2) + (point(member("right").width, 0) / 2) + point(piBaseOffset, 0)
  42.   repeat with i = 1 to piNumAnswers
  43.     viSprite = piResponseSprites + i - 1
  44.     vsMember = psBaseMemberName & IntegerToString(i, pkMaxDigits) & ".up"
  45.     AlignCenteredSpriteToMember(viSprite, vsMember)
  46.     set the loc of sprite viSprite to the loc of sprite viSprite - vpOffset
  47.   end repeat
  48. end
  49.  
  50. on mInitTextFields me
  51.   piQuestionSprite = mGiveDot(poDotMan)
  52.   vsLocatorMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
  53.   AlignTextBoxToSpacer(piQuestionSprite, vsLocatorMember)
  54.   piQuestionOffset = member("questionText").height
  55.   vpOffset = point(0, -piBaseOffset - piQuestionOffset)
  56.   set the loc of sprite piQuestionSprite to the loc of sprite piQuestionSprite + vpOffset
  57.   set the member of sprite piQuestionSprite to "questionText"
  58.   set the ink of sprite piQuestionSprite to 36
  59.   piFirstAnswerSprite = mGiveDots(poDotMan, piNumAnswers)
  60.   pliAnswerOffset = []
  61.   vsLocatorMember = psBaseMemberName & IntegerToString(1, pkMaxDigits) & ".up"
  62.   vpOffset = point(member(vsLocatorMember).width + piBaseOffset, member(vsLocatorMember).height / 2)
  63.   repeat with i = 1 to piNumAnswers
  64.     viNextSprite = piFirstAnswerSprite + i - 1
  65.     vsNum = IntegerToString(i, pkMaxDigits)
  66.     vsLocatorMember = psBaseMemberName & IntegerToString(i, pkMaxDigits) & ".up"
  67.     AlignTextBoxToSpacer(viNextSprite, vsLocatorMember)
  68.     viOffset = member("answerText" & vsNum).height / 2
  69.     add(pliAnswerOffset, viOffset)
  70.     set the loc of sprite viNextSprite to the loc of sprite viNextSprite + vpOffset - point(0, viOffset)
  71.     set the member of sprite viNextSprite to "answerText" & IntegerToString(i, pkMaxDigits)
  72.     set the ink of sprite viNextSprite to 36
  73.   end repeat
  74.   piFromChapterSprite = mGiveDot(poDotMan)
  75.   vsLocatorMember = psBaseMemberName & IntegerToString(piNumAnswers, pkMaxDigits) & ".up"
  76.   AlignTextBoxToSpacer(piFromChapterSprite, vsLocatorMember)
  77.   vihAnswerText = member("answerText" & IntegerToString(piNumAnswers, pkMaxDigits)).height
  78.   vihBtn = member(vsLocatorMember).height
  79.   if vihAnswerText > vihBtn then
  80.     vpOffset = point(0, (vihBtn / 2) + (vihAnswerText / 2) + piBaseOffset)
  81.     piFromChapterOffset = (vihBtn / 2) + (vihAnswerText / 2)
  82.   else
  83.     vpOffset = point(0, vihBtn + piBaseOffset)
  84.     piFromChapterOffset = vihBtn
  85.   end if
  86.   set the loc of sprite piFromChapterSprite to the loc of sprite piFromChapterSprite + vpOffset
  87.   set the member of sprite piFromChapterSprite to "fromChapterText"
  88. end
  89.  
  90. on mInitSprites me
  91.   mResetDots(poDotMan)
  92. end
  93.  
  94. on mHandleToggleBtnClick me, xiID
  95.   viNdx = mGetNdxOfID(poAnswerBtns, xiID)
  96.   mDisableABtn(poAnswerBtns, viNdx, 1)
  97.   if xiID = piCorrectAnswer then
  98.     vsMember = "right"
  99.     puppetSound("legalDrag.snd")
  100.   else
  101.     vsMember = "wrong"
  102.     puppetSound("illegalDrag.snd")
  103.   end if
  104.   vzEvent = symbol(string(pzEvalType) & vsMember)
  105.   set the member of sprite (piResponseSprites + viNdx - 1) to vsMember
  106.   mNotify(poOwner, vzEvent, xiID)
  107. end
  108.  
  109. on mHandleRadioBtnClick me, xiID
  110.   if xiID = piCorrectAnswer then
  111.     vsMember = "right"
  112.   else
  113.     vsMember = "wrong"
  114.   end if
  115.   vzEvent = symbol(string(pzEvalType) & vsMember)
  116.   mNotify(poOwner, vzEvent, xiID)
  117. end
  118.  
  119. on mHandleQuestionReview me, xiQuestion
  120.   mReviewAQuestion(me, xiQuestion)
  121. end
  122.  
  123. on mResetQuestion me
  124.   member("questionText").text = EMPTY
  125.   repeat with i = 1 to piNumAnswers
  126.     member("answerText" & IntegerToString(i, pkMaxDigits)).text = EMPTY
  127.     set the member of sprite (piResponseSprites + i - 1) to "blackdot"
  128.   end repeat
  129.   mUndepressChosenBtn(poAnswerBtns)
  130.   mDisable(poAnswerBtns, 0)
  131.   member("fromChapterText").text = EMPTY
  132. end
  133.  
  134. on mSetQuestionData me, xsData, xlAnswerOrder
  135.   mResetQuestion(me)
  136.   vsOld = the itemDelimiter
  137.   the itemDelimiter = TAB
  138.   member("questionText").HTML = "<html><head></head><body>" & item 1 of xsData & "</body></html>"
  139.   set the loc of sprite piQuestionSprite to the loc of sprite piQuestionSprite + point(0, piQuestionOffset - member("questionText").height)
  140.   piQuestionOffset = member("questionText").height
  141.   delete item 1 of xsData
  142.   viCorrectAnswer = item 1 of xsData
  143.   delete item 1 of xsData
  144.   viNumAnswers = the number of items in xsData
  145.   if viCorrectAnswer <> EMPTY then
  146.     piCorrectAnswer = viCorrectAnswer
  147.     xlAnswerOrder = GetListFrom1toX(viNumAnswers)
  148.     mResetBtnIDs(poAnswerBtns, xlAnswerOrder)
  149.   else
  150.     piCorrectAnswer = 1
  151.     mResetBtnIDs(poAnswerBtns, xlAnswerOrder)
  152.   end if
  153.   if viNumAnswers < piNumAnswers then
  154.     repeat with i = viNumAnswers + 1 to piNumAnswers
  155.       mHideABtn(poAnswerBtns, i)
  156.     end repeat
  157.   else
  158.     repeat with i = piNumAnswers to viNumAnswers
  159.       mShowABtn(poAnswerBtns, i)
  160.     end repeat
  161.   end if
  162.   piNumAnswers = viNumAnswers
  163.   repeat with i = 1 to piNumAnswers
  164.     vsNum = IntegerToString(i, pkMaxDigits)
  165.     viSprite = piFirstAnswerSprite + i - 1
  166.     vsAnswer = item getAt(xlAnswerOrder, i) of xsData
  167.     member("answerText" & vsNum).HTML = "<html><head></head><body>" & vsAnswer & "</body></html>"
  168.     viOffset = member("answerText" & vsNum).height / 2
  169.     set the loc of sprite viSprite to the loc of sprite viSprite + point(0, getAt(pliAnswerOffset, i) - viOffset)
  170.     setAt(pliAnswerOffset, i, viOffset)
  171.   end repeat
  172.   the itemDelimiter = vsOld
  173. end
  174.  
  175. on mSetFromChapter me, xiChapter
  176.   vihAnswerText = member("answerText" & IntegerToString(piNumAnswers, pkMaxDigits)).height
  177.   vihBtn = member(psBaseMemberName & IntegerToString(piNumAnswers, pkMaxDigits) & ".up").height
  178.   if vihAnswerText > vihBtn then
  179.     vpOffset = point(0, (vihBtn / 2) + (vihAnswerText / 2) + piBaseOffset)
  180.     piFromChapterOffset = (vihBtn / 2) + (vihAnswerText / 2)
  181.   else
  182.     vpOffset = point(0, vihBtn + piBaseOffset)
  183.     piFromChapterOffset = vihBtn
  184.   end if
  185.   set the loc of sprite piFromChapterSprite to the loc of sprite piFromChapterSprite + vpOffset
  186.   if not voidp(xiChapter) then
  187.   end if
  188. end
  189.  
  190. on mShowAnswer me
  191.   set the member of sprite (piResponseSprites + mGetNdxOfID(poAnswerBtns, piCorrectAnswer) - 1) to "right"
  192. end
  193.  
  194. on mSelectAnswer me, viWhich
  195.   if viWhich then
  196.     viNdx = mGetNdxOfID(poAnswerBtns, viWhich)
  197.     mDepressABtn(poAnswerBtns, viNdx)
  198.     mDisableABtn(poAnswerBtns, viNdx, 1)
  199.   end if
  200. end
  201.  
  202. on mMarkAnswer me, xiID
  203.   if xiID = piCorrectAnswer then
  204.     vsMember = "right"
  205.   else
  206.     vsMember = "wrong"
  207.   end if
  208.   if xiID > 0 then
  209.     set the member of sprite (piResponseSprites + mGetNdxOfID(poAnswerBtns, xiID) - 1) to vsMember
  210.   end if
  211. end
  212.  
  213. on mDisable me, xbDisable
  214.   mDisable(poAnswerBtns, xbDisable)
  215. end
  216.  
  217. on mNotify me, xiEvent, xOpcode
  218.   case xiEvent of
  219.     #ToggleBtnClick:
  220.       mHandleToggleBtnClick(me, xOpcode)
  221.     #RadioBtnClick:
  222.       mHandleRadioBtnClick(me, xOpcode)
  223.   end case
  224. end
  225.  
  226. on mCleanUp me
  227.   mCleanUp(poAnswerBtns)
  228.   member("questionText").text = EMPTY
  229.   repeat with i = 1 to piNumAnswers
  230.     member("answerText" & IntegerToString(i, pkMaxDigits)).text = EMPTY
  231.   end repeat
  232.   member("fromChapterText").text = EMPTY
  233. end
  234.